package cl.tinet.reservaCD.reserva;

import java.util.ArrayList;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import cl.tinet.reservaCD.modelo.Reserva;
import cl.tinet.reservaCD.modelo.Usuario;

/**
 * 
 * Clase con el CRUD de la reserva en la base de datos que implementa la
 * interface RecervaDao.
 * 
 * @author Carlos Duque.
 */
public class ReservaDaoImpl implements ReservaDao {

    /**
     * Entity manager.
     */
    private EntityManager em;

    /**
     * Constructor que inicializa el manejador de entidad.
     * 
     * @param em
     *            entidad que se va a manejar.
     */
    public ReservaDaoImpl(EntityManager em) {
        this.em = em;
    }

    /**
     * {@inheritDoc}
     */
    public void crearReserva(Reserva reservaCrear) {
        em.persist(reservaCrear);
    }

    /**
     * {@inheritDoc}
     */
    public void eliminarReserva(Reserva reservaEliminar) {
        em.remove(reservaEliminar);
    }

    /**
     * {@inheritDoc}
     */
    public Reserva buscarReservaId(Reserva reservaBusqueda) {

        Reserva resultadaFinal = null;

        String sql = "Select u FROM Reserva u WHERE numeroreserva =:Busuario";
        Query consulta =
                em.createQuery(sql).setParameter("Busuario",
                        reservaBusqueda.getNumeroReserva());

        Reserva resultado = (Reserva) consulta.getSingleResult();
        resultadaFinal = resultado;

        return resultadaFinal;

    }

    /**
     * {@inheritDoc}
     */
    @SuppressWarnings("unchecked")
    public ArrayList<Reserva> listaReserva() {
        return (ArrayList<Reserva>) em.createQuery("SELECT R FROM Reserva R")
                .getResultList();
    }

    /**
     * {@inheritDoc}
     */
    @SuppressWarnings("unchecked")
    public ArrayList<Reserva> listaReservaUsuaio(Usuario usuarioBucarListar) {
        return (ArrayList<Reserva>) em
                .createQuery(
                        "Select u FROM Reserva u WHERE usuario_nombreusuario =:Busuario")
                .setParameter("Busuario", usuarioBucarListar.getNombreUsuario())
                .getResultList();
    }

}
